home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- for LSI C-86 v3.30 試食版
- *********************************************************************/
-
- #include "tspath.h"
- #include "tsmacro.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- // パス名を構成要素に分解する
- // 動作はMetaWate High C Compiler v1.7 の _splitpath()関数に
- // 可能な限り合わせてあります。
- extern void splitPath(
- char *path, // 変換するパス
- char *drive, // ドライブ名
- char *dir, // ディレクトリ名
- char *fname, // ファイル名
- char *ext // 拡張子
- )
- {
- int i, n;
- char c;
- int colon, yen, fnend, period, tail;
- colon = yen = period = -1;
- drive[0] = dir[0] = fname[0] = ext[0] = '\0';
-
- for (i = 0; (c=path[i]) != '\0'; i++) {
- if (iskanji(c)) {
- i++; continue;
- }
- switch (c) {
- case ':':
- colon = i; break;
- case '\\':
- case '/':
- yen = i; break;
- case '.':
- if (0 < i && path[i-1] == '.')
- break;
- period = i; break;
- }
- }
- tail = i-1;
-
- // ドライブ名
- if (1 <= colon) {
- colon = 1;
- if (iskanji(path[1]))
- colon = 0;
- }
- strncpy(drive, path, colon+1);
- drive[colon+1] = '\0';
-
- // ディレクトリ名
- if (colon + MAX_DIR <= yen) {
- yen = colon+MAX_DIR-1;
- if (iskanji(path[yen]))
- yen--;
- } else if (yen < colon)
- yen = colon;
- n = yen-colon;
- strncpy(dir, &path[colon+1], n);
- dir[n] = '\0';
-
- // ファイル名
- fnend = period-1;
- if (fnend < yen)
- fnend = tail;
- if (yen + MAX_FNAME <= fnend) {
- fnend = yen+MAX_FNAME-1;
- if (iskanji(path[fnend]))
- fnend--;
- }
- n = fnend-yen;
- strncpy(fname, &path[yen+1], n);
- fname[n] = '\0';
-
- // 拡張子
- if (period <= yen) {
- ext[0] = '\0';
- return;
- }
- if (fnend + MAX_EXT <= tail) {
- tail = fnend+MAX_EXT-1;
- if (iskanji(path[tail]))
- tail--;
- } else if (tail < period-1)
- tail = fnend;
- n = tail-fnend;
- strncpy(ext, &path[fnend+1], n);
- ext[n] = '\0';
- return;
- }
-